package org.swim.entity;
import java.io.Serializable;
import java.util.List;
import javax.persistence.*;

import org.hibernate.annotations.OnDelete;
import org.hibernate.annotations.OnDeleteAction;
import org.swim.entity.Notificabile.AzioniNotifica;
import org.swim.entity.Notificabile.TipoNotifica;

import java.util.Date;
/**
 * Entity che rappresenta un feedback di SWIMv2
 * @author Giugni - Le Preux 
 */

@Entity
@Table(name="feedback")
public class Feedback implements Notificabile, Serializable{
	/**
	 * 
	 */
	private static final long serialVersionUID = 7148808984004283681L;
	
	public Feedback(RichiestaAiuto ra, String descrizione, int valore) {
		//this.id=(int) System.currentTimeMillis();
		this.richiestaAiuto = ra;
		this.commento=descrizione;
		this.valore=valore;
		//this.idNotifica = (int) System.currentTimeMillis();
		this.dataModifica =  new Date(System.currentTimeMillis());
	}
	public Feedback(){}
	
	@Id
	@Column(name="id",nullable=false)
	private int id;
	
	@Column(name="commento",nullable=true)
	private String commento;
	
	@Column(name="valore",nullable=true)
	private int valore;
	
	@Column(name="dataModifica",nullable=true)
	private Date dataModifica;
	
	@OneToOne
	@JoinColumn(name="id", referencedColumnName="id")
	private RichiestaAiuto richiestaAiuto;
	public RichiestaAiuto getRichiestaAiuto() {
		return richiestaAiuto;
	}
	public void setRichiestaAiuto(RichiestaAiuto richiestaAiuto) {
		this.richiestaAiuto = richiestaAiuto;
	}
	
	
	public int getId() {
		return id;
	}
	public void setId(int id) {
		this.id = id;
	}

	public String getCommento() {
		return commento;
	}
	public void setCommento(String commento) {
		this.commento = commento;
	}
	
	public int getValore() {
		return valore;
	}
	public void setValore(int valore) {
		this.valore = valore;
	}
	
	public Date getDataModifica() {
		return dataModifica;
	}
	public void setDataModifica(Date dataModifica) {
		this.dataModifica = dataModifica;
	}
	
	public String getIdNotifica() {
		return TipoNotifica.FEEDBACK+"@"+this.id;
	}
	
	@Override
	public Boolean hasAzione(Utente u, AzioniNotifica a) {
		return false;
	}
	@Override
	public String getDecrizioneNotifica(Utente u) {
			return this.commento;
	}
	@Override
	public String getTitoloNotifica(Utente u) {
		return "Hai ricevuto un feedback come " + this.richiestaAiuto.getAbilita().getNome();
	}
	@Override
	public TipoNotifica getTipo() {
		return TipoNotifica.FEEDBACK;
	}

/*
	@Override
	public int hashCode() {
		final int prime = 31;
		int result = 1;
		result = prime * result + ((cognome == null) ? 0 : cognome.hashCode());
		result = prime * result + ((dataNascita == null) ? 0 : dataNascita.hashCode());
		result = prime * result + email;
		result = prime * result + ((nome == null) ? 0 : nome.hashCode());
		return result;
	}

	@Override
	public boolean equals(Object obj) {
		if (this == obj)
			return true;
		if (obj == null)
			return false;
		if (getClass() != obj.getClass())
			return false;
		
		Feedback other = (Feedback) obj;
		
		if (commento == null) {
			if (other.commento != null)
				return false;
		} 
		else if (!commento.equals(other.commento))
			return false;
		
		if (valore != other.valore)
			return false;
		
		if (dataModifica == null) {
			if (other.dataModifica != null)
				return false;
		} else if (!dataModifica.equals(other.dataModifica))
			return false;
		
		if (idNotifica != other.idNotifica)
			return false;
		
		return true;
	}
	*/
}
